<?php
declare (strict_types = 1);

namespace app\index\controller;
use \think\facade\Db;
use \think\facade\View;
use \think\facade\Request;
class Index
{
    public function index()
    {
//        return \think\facade\View::fetch();
//        return View::fetch();
//        return View::fetch('aaaa');
//        return View::fetch('user/index');
//        return View::fetch('index@index/index');  应用@控制器/方法

        //模板赋值
        //标量赋值
        $name='张三';
        View::assign('string',$name);
        //一堆数组赋值
        $arr1=[
            'name'=>'张三',
            'sex'=>'男'
        ];
        View::assign('arr1',$arr1);
        //二位数组
        $arr2=[
            [
              'name'=>'张三',
              'sex'=>'男'
            ],
            [
                'name'=>'张四',
                'sex'=>'男'
            ]
        ];
        View::assign('arr2',$arr2);
        //对象赋值
        $obj=new \stdClass();  //实例化 类
        $obj->name='张五';
        $obj->sex='男';
        View::assign('obj',$obj);
        //批量赋值 1
        $arr3=[
            'name'=>'张六',
            'sex'=>'男'
        ];
        //View::assign('arr3',$arr3);
        //批量赋值 2


        //循环
        $list=[
            [
                'id'=>'1',

                'name'=>'张三',
            ],
            [
                'id'=>'2',

                'name'=>'张四',
            ],
            [
                'id'=>'3',

                'name'=>'张五',
            ],
            [
                'id'=>'4',

                'name'=>'张六',
            ],
        ];

        View::assign('list',$list);

        //对比标签
        $num=2;
        View::assign('num',$num);

        //判断标签
        //switch 标签
        //if 标签
        //{if 表达式} value1
        //{elseif 表达式}value2
        //{else /} value3
        //{/if}

        //{in}
        //{notin}
        //{between}
        //{notbetween}
        //{present}
        //{notpresent}
        //{empty}
        //{notempty}
        //{defined}




        //比较标签
        //eq  neq  gt  ngt  lt  elt  heq  nheq
        //{比较标签 name='变量' value='值'}
        //内容
        //{else /}
        //内容
        //{/ 比较标签}




        //使用函数
        $t=time();
        View::assign('t',$t);



        //三元运算
        //
        $str=2;
        View::assign('str',$str);

        return view();

    }
    public function sy()
    {
        //三元运算
        //
        $str=2;
        View::assign('str',$str);
        return view();
    }
    public function url()
    {
        //{:url('应用/控制器/方法')}


        //url 生成
        //Route  路由类  参数 buildUrl('地址表达式','地址栏参数')
        //suffix('伪静态后缀')
        //domain('域名')
        //几个参数可以一起写
        //echo \think\facade\Route::buildUrl();  //生成 url 链接  第一个参数不写 默认 方法名  /index.php/index/Index/url.html
        //echo \think\facade\Route::buildUrl('c');  //生成 url 链接  写一个参数替换 方法  /index.php/index/Index/c.html
        //echo \think\facade\Route::buildUrl('b/c');  //生成 url 链接  写两个参数替换 方法 和 控制器  /index.php/index/b/c.html
        //echo \think\facade\Route::buildUrl('a/b/c');  //生成 url 链接  写三个参数替换 应用 方法 控制器  /index.php/a/b/c.html
        //echo \think\facade\Route::buildUrl('',['id'=>1,'name'=>'shuaige']);  //第二个参数是生成地址栏参数  数组形式 /index.php/index/Index/url.html?id=1&name=shuaige
        //echo \think\facade\Route::buildUrl()->domain('www');  //生成域名  http://www.tp.com/index.php/index/Index/url.html
        //echo \think\facade\Route::buildUrl()->suffix('php');  //伪静态后缀  /index.php/index/Index/url.php
        //echo \think\facade\Route::buildUrl('地址表达式','地址栏参数')->suffix('伪静态后缀')->domain('域名');
        //助手函数  url
        //echo url('a/b/c',['id'=>1],'php','www');  //参数和上面一致  http://www.tp.com/index.php/a/b/c.php?id=1
    }
    public function getinfo()
    {
        //请求类
        //Request  接参 get post file all
            //echo $id=\think\facade\Request::get('id');
            //echo $id=\think\facade\Request::post('name');
        //param 可接 get post pathinfo
            //echo $id=\think\facade\Request::param('name');
            //echo $img=\think\facade\Request::file('img');
            //echo "<pre>";
            //print_r($img);
            //echo "</pre>";
        //助手函数  input('get.');
            //接全部 get 方式值
            //$get=\think\facade\Request::get();
        //参数('变量名/变量修饰','默认值','过滤函数')  变量修饰 可以改变变量接参的类型  s  d  b  a  f
            $id=\think\facade\Request::param('id/b','默认值','strip_tags,htmlspecialchars,htmlentities,stripslashes');
            var_dump($id);
        $res = \think\facade\Db::name('user')->select();
        //echo "<pre>";
        //print_r($res);
        //echo "</pre>";
        View::assign('res',$res);
        return view();

    }
    public function getUser()
    {

        //链式操作

        //table() 参数 表全名    name() 去表前缀
            //Db::table('ecm_user')->select();
            //Db::name('user')->select();

        //alias 表别名
            //Db::table('ecm_user a')->select();
            //Db::table(['ecm_user'=>'a'])->select();
            //Db::table('ecm_user')->alias('a')->select();

        //order 排序
            //Db::table('ecm_user')->order('id','desc')->select();
            //Db::table('ecm_user')->order('id desc')->select();
            //Db::table('ecm_user')->order(['id'=>'desc'])->select();
            //$res=Db::table('ecm_user')->orderRand()->select();            随机排序  每次都是随机
            //$res=Db::table('ecm_user')->orderRaw('rand(id)')->select();   随机排序  固定随机

        //join 连表
            //$list = Db::name('user')
            //->alias('u')
            //->join('ecm_order o','u.id = o.uid','left')
            //->leftJoin('ecm_order o','u.id = o.uid')
            //->join('order o','u.id = o.uid','left')
            //->join(['order'=>' o'],'u.id = o.uid','left')
            //->select();

        //field 查询字段
            //$list = Db::name('user')->field('id,uname')->select();
            //$list = Db::name('user')->field(['id','uname'])->select();
            //$list = Db::name('user')->field('id ids,uname name')->select();            起别名
            //$list = Db::name('user')->field(['id'=>'ids','uname'=>'name'])->select();  起别名
            //$list = Db::name('user')->field('*')->select();                            隐式查询  * 查询全部 不显示查询字段
            //$list = Db::name('user')->field(true)->select();                           显示查询  查询全部 显示查询字段
            //$list = Db::name('user')->withoutField('id,uname')->select();              排除字段
            //$list = Db::name('user')->field('upper(md5(id)) id,uname')->select();      使用函数

        //Db 查询
            //find  select
            //where(字段,表达式,条件)

        //使用命名空间  think\facade
            //\think\facade\Db::table('ecm_user')->find(1);

        //查询一条数据
            //$info = Db::table('ecm_user')->find(1);                            //返回一维数组
            //$info = Db::table('ecm_user')->where('id','=','1')->find();        //返回一维数组
        //查询所有数据
            //$info = Db::table('ecm_user')->select();                           //返回结果集对象
            //$arr = $info->toArray();                                           //结果集转成数组
        //查询指定字段
            //$name = Db::table('ecm_user')->where('id','=',2)->value('uname');  //返回字段值
            //$name = Db::table('ecm_user')->column('uname');                        //返回字段值

        //表达式查询
        //比较符  = <> > < >= <=
            //$info = Db::table('ecm_user')->where('id','>','1')->select();

        //模糊搜索
            //$info = Db::table('ecm_user')->where('uname','like','%唐%')->select();

        //范围查询  in/notin  between/notbetween
            //$info = Db::table('ecm_user')->where('id','notin','1,2,3')->select();
            //$info = Db::table('ecm_user')->where('id','notbetween','1,2,3')->select();

        //为空/不为空  null/notnull
            //$info = Db::table('ecm_user')->where('openid','not null')->select();

        //exp
            //$info = Db::table('ecm_user')->where('id','exp','in(1,2,3)')->select();
            //$info = Db::table('ecm_user')->where('id in(1,2,3)')->select();

        //EXISTS/NOTEXISTS  子语句是否被查询到 查询到正常输出 查询不到 整条语句不输出         闭包
            //$info = Db::table('ecm_user')->whereExists(function ($q){
            //    $q->table('ecm_user')->where('id','=',1);  子语句不需要写 select
            //})->select();

        //时间查询  between time , > time , >= time , < time , <= time  时间格式会自动转换为时间戳
            //$info = Db::table('ecm_user')->where('addtime','between time',['2000-1-1','2021-1-1'])->select();
            //$info = Db::table('ecm_user')->where('addtime','> time','2021-1-1')->select();

        //find in set  准确搜索
            //$info = Db::table('ecm_user')->where('head_img','find
        // in set','3')->select();

        //limit/page   限制查询 分页
            //$list = Db::name('user')->limit(2)->select();
            //$list = Db::name('user')->limit(2,2)->select();
            //$list = Db::name('user')->page(2)->select();
            //$list = Db::name('user')->page(2,2)->select();
            //$list = Db::name('user')->limit(1)->page(3)->select();

        //group/having  分组  筛选
        $list = Db::name('user')
            ->field('count(id) number,sex')
            ->group('sex')
            ->having('count(id)>1')
            ->select();
        echo "<pre>";
        print_r($list);
        echo "</pre>";
















//        $keywords='唐';
//        $sex=1;
//        Db::name('user')
//            ->where('uname','like','%'.$keywords.'%')
//            ->where('sex','=','$sex')
//            ->select();
//        $where=[];
//        if($keywords <> '')                $where[]=['uname','like','%'.$keywords.'%'];
//        if(isset($sex) && $sex <> '')      $where[]=['sex','=',$sex];
//        $list=Db::name('user')
//            ->where($where)
//            ->select();




    }
    public function hW()
    {
        //聚合查询
            //$count = Db::name('user')->count();  //总数
            //$max = Db::name('user')->max('id');  //最大数
            //$min = Db::name('user')->min('id');  //最小数
            //$avg = Db::name('user')->avg('id');  //平均数
            //$sum = Db::name('user')->sum('id');  //总和

        //快捷查询
        //相同查询条件时使用 两个字段一起查询  | 或者  & 并且
        //$res=Db::table('ecm_user')
            //  ->where('uname|nickname','like','%悟%')
            //  ->where('uname&nickname','like','%悟%')
            ////  ->where('create_time&update_time','>',0)
            //  ->find();

        //闭包查询  判断子查询是否有 有 正常输出 没有 整条语句都不执行
            //$res=Db::name('brand')
            //    ->where(function($q){  // $q  相当于 Db 查询源 就是 Db::name('brand')
            //        $q->whereOr('brand_logo','=','')
            //            ->whereOr('brand_logo','=',null);
            //    })
            //    ->where('if_show',0)
            //    ->select();

        //快捷查询  将条件写在 where 后面 省略 where()里的条件
            //$res=Db::name('user')
            //    ->whereLike('uname','%唐%')
            //    ->select();
            //$res=Db::name('user')
            //    ->whereColumn('openid','>','sex')
            //    ->select();

        //动态查询  将查询字段写在 where 后面 省略 where()里的条件
            //where 表达式查询简化
                //$str=Db::name('user')
                //    ->whereUname('唐僧')
                //    ->find();
                //$str=Db::name('user')
                //    ->where('uname','=','唐僧')
                //    ->find();
            //返回查询的一条数据
                //$str=Db::name('user')
                //    ->getByUname('唐僧');
            //返回一个字段值
                //$str=Db::name('user')
                //    ->getFieldByUname('唐僧','nickname');

        //子查询  作为表名
            //$sql=Db::name('user')->fetchSql(true)->select();  //生成 sql 语句(表名)
            //$sql=Db::name('user')->where('id','>',1)->buildSql(true);  //生成 sql 语句(表名) 加上查询条件  buildSql(true) 构建子查询 将它作为表名
            //$res=Db::table($sql.' u')->where('id','<',5)->select();  //根据 $sql 作为表名 进行查询 u 起别名

        //闭包构建子查询  作为条件
            //$res=Db::name('user')
            //    ->where('id','in',function($q){
            //        $q->table('ecm_user')->where('id','>',2)->field('id');
            //    })
            //    ->select();

        //分页查询
            $list = Db::name('user')->paginate([
                'list_rows'=>1,
                'page'=>2,
                'query'=>[
                    'id'=>1,
                    'keywords'=>'一'
                ]
            ]);
            View::assign('list',$list);
            return view();
            

    }

}
